oxidation: Add implementation of bupsplit in Rust
authorColin Walters <walters@verbum.org>
Wed, 25 Jan 2017 02:43:53 +0000 (21:43 -0500)
committerAtomic Bot <atomic-devel@projectatomic.io>
Fri, 3 Feb 2017 14:29:00 +0000 (14:29 +0000)
commitd894f609dbacd6d66aaff0402cab60a59901f73e
tree899a2ddd63656b2e2915d97effdf989bb606dcbd
parent7803fe1d60f32f659555acf32a8812a45ab15792
oxidation: Add implementation of bupsplit in Rust

This is an initial drop of "oxidation", or adding implementation
of components in Rust.  The bupsplit code is a good target - no
dependencies, just computation.

Translation into Rust had a few twists -

 - The C code relies a lot on overflowing unsigned ints, and
   also on the C promotion rules for e.g. `uint8_t -> int32_t`
 - There were some odd loops that I introduced bugs in while
   translating...in particular, the function always returns `len`,
   but I mistakenly translated to `len+1`, resulting in an OOB
   read on the C side, which was hard to debug.

On the plus side, an off-by-one array indexing in the Rust code paniced nicely.

In practice, we'll need a lot more build infrastructure to make this work, such
as using `cargo vendor` when producing build artifacts for example. Also, Cargo
is yet another thing we need to cache.

Where do we go with this? Well, I think we should merge this, it's not a lot of
code. We can just have it be an alternative CI target. Should we do a lot more
right now? Probably not immediately, but I find the medium/long term prospects
pretty exciting!

Closes: #656
Approved by: jlebon
.redhat-ci.yml
Makefile-libostree.am
Makefile-tests.am
Makefile.am
configure.ac
rust/Cargo.toml [new file with mode: 0644]
rust/src/bupsplit.rs [new file with mode: 0644]